UNION-based SQL Injection
別のテーブルに取得したい情報があるときに便利
以下のような問題を考える
ブログの記事一覧を取得するページがある
SELECT title FROM post WHERE tag='$tag'
$tagはユーザーが入力できて、SQL Injectionが可能
titleの内容はWebページに出力される
この状況で、secretテーブルにあるflagカラムを窃取したい
このような場合にUNION文が有効
$idに' UNION SELECT secret FROM flag -- を入れる
クエリはSELECT title FROM post WHERE tag='' UNION SELECT flag FROM secret -- 'になる
UNION文によってSELECT文の結果が結合されるため、titleとしてflagを出力させることができる
UNION文によって結合される列の数は一致しなければならない状況が多い
元のクエリがわからない場合はsecret, null, nullのようにnullを入れて正常に動く数を探すことができる
資料